<!DOCTYPE html>
<html lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>GCC 3.2 Release Series &mdash; Changes, New Features, and Fixes</title>
<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
</head>

<!-- GCC maintainers, please do not hesitate to update/contribute entries
     concerning those part of GCC you maintain!  2002-03-23, Gerald.
-->

<body>

<h1>GCC 3.2 Release Series<br />Changes, New Features, and Fixes</h1>

<p>The latest release in the 3.2 release series is
<a href="#3.2.3">GCC 3.2.3</a>.</p>

<h2>Caveats and New Features</h2>

<h3>Caveats</h3>
  <ul>
    <li>The C++ compiler does not correctly zero-initialize
        pointers-to-data members.  You must explicitly initialize
        them.  For example: <code>int S::*m(0);</code>
        will work, but depending on default-initialization to zero
        will not work.  This bug cannot be fixed in GCC 3.2 without
        inducing unacceptable risks.  It will be fixed in GCC 3.3.</li>
    <li>This GCC release is based on the GCC 3.1 sourcebase, and thus has
        all the <a href="../gcc-3.1/changes.html">changes in the GCC 3.1
        series</a>.  In addition, GCC 3.2 has a number of C++ ABI fixes
        which make its C++ compiler generate binary code which is incompatible
        with the C++ compilers found in earlier GCC releases, including GCC 3.1
        and GCC 3.1.1.</li>
  </ul>

<h3>Frontend Enhancements</h3>

<h4>C/C++/Objective-C</h4>
 <ul>
    <li>The method of constructing the list of directories to be searched
        for header files has been revised.  If a directory named by a
        <code>-I</code> option is a standard system include directory,
        the option is ignored to ensure that the default search order
        for system directories and the special treatment of system header
        files are not defeated.</li>
    <li>The C and Objective-C compilers no longer accept the "Naming
        Types" extension (<code>typedef foo = bar</code>); it was
        already unavailable in C++.  Code which uses it will need to
        be changed to use the "typeof" extension instead:
        <code>typedef typeof(bar) foo</code>.  (We have removed this
        extension without a period of deprecation because it has
        caused the compiler to crash since version 3.0 and no one
        noticed until very recently.  Thus we conclude it is not in
        widespread use.)</li>
 </ul>

<h4>C++</h4>
  <ul>
    <li>GCC 3.2 fixed serveral differences between the C++ ABI implemented
        in GCC and the multi-vendor standard, but more have been found
        since the release.  3.2.1 adds a new warning, <code>-Wabi</code>,
        to warn about code which is affected by these bugs.
	We will fix these bugs in some future release, once we are
        confident that all have been found; until then, it is our intention
        to make changes to the ABI only if they are necessary for correct
        compilation of C++, as opposed to conformance to the ABI
        documents.</li>
    <li>For details on how to build an ABI compliant compiler for
        GNU/Linux systems, check the <a href="c++-abi.html">common C++ ABI
        page</a>.</li>
  </ul>

<h3>New Targets and Target Specific Improvements</h3>

<h4>IA-32</h4>
  <ul>
   <li>Fixed a number of bugs in SSE and MMX intrinsics.</li>
   <li>Fixed common compiler crashes with SSE instruction set enabled
       (implied by <code>-march=pentium3</code>, <code>pentium4</code>,
       <code>athlon-xp</code>)</li>
   <li><code>__m128</code> and <code>__m128i</code> is not 128bit
       aligned when used in structures.</li>
  </ul>

<h4>x86-64</h4>
  <ul>
   <li>A bug whereby the compiler could generate bad code for
       <code>bzero</code> has been fixed.</li>
   <li>ABI fixes (implying ABI incompatibilities with previous version in some
   corner cases)</li>
   <li>Fixed prefetch code generation</li>
  </ul>

<!-- Changes for later point releases should be added at the top. -->

<hr />
<h2 id="GCC3.2.3">GCC 3.2.3</h2>

<p>3.2.3 is a bug fix release only; there are no new features that
were not present in GCC 3.2.2.</p>

<h3>Bug Fixes</h3>

<p>This section lists the problem reports (PRs) from GCC's bug tracking
system that are known to be fixed in the 3.2.3 release. This
list might not be complete (that is, it is possible that some PRs
that have been fixed are not listed here), and some of the titles have been
changed to make them more clear.</p>

<h4>Internal Compiler Errors (multi-platform)</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR3782">3782</a>: (c++) <code>-quiet -fstats</code> produces a segmentation fault in cc1plus</li>
<li><a href="https://gcc.gnu.org/PR6440">6440</a>: (c++) template specializations cause ICE</li>
<li><a href="https://gcc.gnu.org/PR7050">7050</a>: (c++) ICE on: <code>(i ? get_string() : throw)</code></li>
<li><a href="https://gcc.gnu.org/PR7741">7741</a>: ICE on conflicting types (<code>make_decl_rtl</code> in <code>varasm.c</code>)</li>
<li><a href="https://gcc.gnu.org/PR7982">7982</a>: (c++) ICE due to infinite recursion (using STL set)</li>
<li><a href="https://gcc.gnu.org/PR8068">8068</a>: exceedingly high (infinite) memory usage</li>
<li><a href="https://gcc.gnu.org/PR8178">8178</a>: ICE with <code>__builtin_ffs</code></li>
<li><a href="https://gcc.gnu.org/PR8396">8396</a>: ICE in <code>copy_to_mode_reg</code>, in <code>explow.c</code></li>
<li><a href="https://gcc.gnu.org/PR8674">8674</a>: (c++) ICE in <code>cp_expr_size</code>, in <code>cp/cp-lang.c</code></li>
<li><a href="https://gcc.gnu.org/PR9768">9768</a>: ICE when optimizing inline code at <code>-O2</code></li>
<li><a href="https://gcc.gnu.org/PR9798">9798</a>: (c++) Infinite recursion (segfault) in <code>cp/decl.c:push_using_directive</code> with recursive <code>using</code> directives</li>
<li><a href="https://gcc.gnu.org/PR9799">9799</a>: mismatching structure initializer with nested flexible array member: ICE</li>
<li><a href="https://gcc.gnu.org/PR9928">9928</a>: ICE on duplicate <code>enum</code> declaration</li>
<li><a href="https://gcc.gnu.org/PR10114">10114</a>: ICE in <code>mem_loc_descriptor</code>, in <code>dwarf2out.c</code> (affects sparc, alpha)</li>
<li><a href="https://gcc.gnu.org/PR10352">10352</a>: ICE in <code>find_reloads_toplev</code></li>
<li><a href="https://gcc.gnu.org/PR10336">10336</a>: ICE with <code>-Wunreachable-code</code></li>
</ul>

<h4>C/optimizer bugs:</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8224">8224</a>: Incorrect joining of signed and unsigned division</li>
<li><a href="https://gcc.gnu.org/PR8613">8613</a>: <code>-O2</code> produces wrong code with builtin <code>strlen</code> and postincrements</li>
<li><a href="https://gcc.gnu.org/PR8828">8828</a>: gcc reports some code is unreachable when it is not</li>
<li><a href="https://gcc.gnu.org/PR9226">9226</a>: GCSE breaking argument passing</li>
<li><a href="https://gcc.gnu.org/PR9853">9853</a>: miscompilation of non-constant structure initializer</li>
<li><a href="https://gcc.gnu.org/PR9797">9797</a>: C99-style <code>struct</code> initializers are miscompiled</li>
<li><a href="https://gcc.gnu.org/PR9967">9967</a>: Some standard C function calls should not be replaced when optimizing for size</li>
<li><a href="https://gcc.gnu.org/PR10116">10116</a>: ce2: invalid merge of <code>join_bb</code> in the context of <code>switch</code> statements</li>
<li><a href="https://gcc.gnu.org/PR10171">10171</a>: wrong code for inlined function</li>
<li><a href="https://gcc.gnu.org/PR10175">10175</a>: <code>-Wunreachable-code</code> doesn't work for single lines</li>
</ul>

<h4>C++ compiler and library:</h4>

<ul>
<li><a href="https://gcc.gnu.org/PR8316">8316</a>: Confusing diagnostic for code that misuses conversion operators</li>
<li><a href="https://gcc.gnu.org/PR9169">9169</a>: <code>filebuf</code> output fails if <code>codecvt&lt;&gt;::out</code> returns <code>noconv</code></li>
<li><a href="https://gcc.gnu.org/PR9420">9420</a>: incomplete type incorrectly reported</li>
<li><a href="https://gcc.gnu.org/PR9459">9459</a>: <code>typeof</code> in return type specification of template not supported</li>
<li><a href="https://gcc.gnu.org/PR9507">9507</a>: <code>filebuf::open</code> handles <code>ios_base::ate</code> incorrectly</li>
<li><a href="https://gcc.gnu.org/PR9538">9538</a>: Out-of-bounds memory access in <code>streambuf::sputbackc</code></li>
<li><a href="https://gcc.gnu.org/PR9602">9602</a>: Total confusion about template/friend/virtual/abstract</li>
<li><a href="https://gcc.gnu.org/PR9993">9993</a>: destructor not called for local object created within and returned from infinite loop</li>
<li><a href="https://gcc.gnu.org/PR10167">10167</a>: <code>ieee_1003.1-2001</code> locale specialisations on a glibc-2.3.2 system</li>
</ul>

<h4>Java compiler and library:</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR9652">9652</a>: libgcj build fails on irix6.5.1[78]</li>
<li><a href="https://gcc.gnu.org/PR10144">10144</a>: <i>gas</i> on solaris complains about bad <code>.stabs</code> lines for java, native <i>as</i> unaffected </li>
</ul>

<h4>x86-specific (Intel/AMD):</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8746">8746</a>: gcc miscompiles Linux kernel ppa driver on x86</li>
<li><a href="https://gcc.gnu.org/PR9888">9888</a>: <code>-mcpu=k6 -Os</code> produces out of range loop instructions</li>
<li><a href="https://gcc.gnu.org/PR9638">9638</a>: Cross-build for target i386-elf and i586-pc-linux-gnu failed</li>
<li><a href="https://gcc.gnu.org/PR9954">9954</a>: Cross-build for target i586-pc-linux-gnu (<code>--with-newlib</code>) failed</li>
</ul>

<h4>SPARC-specific:</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7784">7784</a>: [Sparc] ICE in extract_insn, in recog.c</li>
<li><a href="https://gcc.gnu.org/PR7796">7796</a>: sparc extra failure with <code>-m64</code> on execute/930921-1.c in unroll.c</li>
<li><a href="https://gcc.gnu.org/PR8281">8281</a>: ICE when compiling with <code>-O2 -fPIC</code> for Ultrasparc</li>
<li><a href="https://gcc.gnu.org/PR8366">8366</a>: [Sparc] C testsuite failure with <code>-m64</code> -fpic -O in execute/loop-2d.c</li>
<li><a href="https://gcc.gnu.org/PR8726">8726</a>: gcc <code>-O2</code> miscompiles Samba 2.2.7 on 32-bit sparc</li>
<li><a href="https://gcc.gnu.org/PR9414">9414</a>: Scheduling bug on Ultrasparc</li>
<li><a href="https://gcc.gnu.org/PR10067">10067</a>: GCC-3.2.2 outputs invalid asm on sparc64</li>
</ul>

<h4>m68k-specific:</h4>

<ul>
<li><a href="https://gcc.gnu.org/PR7248">7248</a>: broken "inclusive or" code</li>
<li><a href="https://gcc.gnu.org/PR8343">8343</a>: m68k-elf/rtems ICE at instantiate_virtual_regs_1</li>
</ul>

<h4>PowerPC-specific:</h4>

<ul>
<li><a href="https://gcc.gnu.org/PR9732">9732</a>: Wrong code with <code>-O2 -fPIC</code></li>
<li><a href="https://gcc.gnu.org/PR10073">10073</a>: ICE: powerpc cannot split insn</li>
</ul>

<h4>Alpha-specific:</h4>

<ul>
<li><a href="https://gcc.gnu.org/PR7702">7702</a>: optimization problem on a DEC alpha under OSF1</li>
<li><a href="https://gcc.gnu.org/PR9671">9671</a>: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system</li>
</ul>

<h4>HP-specific:</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8694">8694</a>: &lt;string&gt; breaks &lt;ctype.h&gt; on HP-UX 10.20 (DUP: 9275)</li>
<li><a href="https://gcc.gnu.org/PR9953">9953</a>: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10 (missing symbol)</li>
<li><a href="https://gcc.gnu.org/PR10271">10271</a>: Floating point args don't get reloaded across function calls with <code>-O2</code></li>
</ul>

<h4>MIPS specific:</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR6362">6362</a>: mips-irix6 gcc-3.1 C testsuite failure with <code>-mips4</code> in compile/920501-4.c</li>
</ul>

<h4>CRIS specific:</h4>

<ul>
<li><a href="https://gcc.gnu.org/PR10377">10377</a>: gcc-3.2.2 creates bad assembler code for cris</li>
</ul>

<h4>Miscellaneous and minor bugs:</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR6955">6955</a>: collect2 says "core dumped" when there is no core</li>
</ul>

<hr />
<h2 id="GCC3.2.2">GCC 3.2.2</h2>

<p>Beginning with 3.2.2, GCC's Makefile suite supports redirection of
<code>make install</code> by means of the <code>DESTDIR</code>
variable.  Parts of the GCC tree have featured that support long
before, but now it is available even from the top level.</p>

<p>Other than that, GCC 3.2.2 is a bug fix release only; there are no
new features that were not present in GCC 3.2.1.</p>

<h3>Bug Fixes</h3>

<p>On the following i386-based systems GCC 3.2.1 broke the C ABI wrt.
functions returning structures: Cygwin, FreeBSD (GCC 3.2.1 as shipped
with FreeBSD 5.0 does not have this problem), Interix, a.out-based GNU/Linux
and NetBSD, OpenBSD, and Darwin.  GCC 3.2.2 reverts this ABI change, and
thus restores ABI-compatibility with previous releases (except GCC 3.2.1)
on these platforms.</p>
	
<p>This section lists the problem reports (PRs) from GCC's bug tracking
system that are known to be fixed in the 3.2.2 release. This
list might not be complete (that is, it is possible that some PRs
that have been fixed are not listed here) and some of the titles have been
changed to make them more clear.</p>

<h4>Internal Compiler Errors (multi-platform)</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR5919">5919</a>: (c++) ICE when passing variable array to template function</li>
<li><a href="https://gcc.gnu.org/PR7129">7129</a>: (c++) ICE with min/max assignment operators (<code>&lt;?=</code> and <code>&gt;?=</code>)</li>
<li><a href="https://gcc.gnu.org/PR7507">7507</a>: ICE with <code>-O2</code> when address of called function is a complicated expression</li>
<li><a href="https://gcc.gnu.org/PR7622">7622</a>: ICE with nested inline functions if function's address is taken</li>
<li><a href="https://gcc.gnu.org/PR7681">7681</a>: (fortran) ICE in <code>compensate_edge</code>, in <code>reg-stack.c</code> (also PR <a href="https://gcc.gnu.org/PR9528">9258</a>)</li>
<li><a href="https://gcc.gnu.org/PR8031">8031</a>: (c++) ICE in code comparing <code>typeid</code>s and casting from virtual base</li>
<li><a href="https://gcc.gnu.org/PR8275">8275</a>: ICE in <code>simplify_subreg</code></li>
<li><a href="https://gcc.gnu.org/PR8332">8332</a>: (c++) builtin <code>strlen</code>/template interaction causes ICE</li>
<li><a href="https://gcc.gnu.org/PR8372">8372</a>: (c++) ICE on explicit call of destructor</li>
<li><a href="https://gcc.gnu.org/PR8439">8439</a>: (c, not c++) empty struct causes ICE</li>
<li><a href="https://gcc.gnu.org/PR8442">8442</a>: (c++) ICE with nested template classes</li>
<li><a href="https://gcc.gnu.org/PR8518">8518</a>: ICE when compiling mplayer ("<code>extern inline</code>" issue)</li>
<li><a href="https://gcc.gnu.org/PR8615">8615</a>: (c++) ICE with out-of-range character constant template argument</li>
<li><a href="https://gcc.gnu.org/PR8663">8663</a>: (c++) ICE in <code>cp_expr_size</code>, at <code>cp-lang.c:307</code></li>
<li><a href="https://gcc.gnu.org/PR8799">8799</a>: (c++) ICE: error reporting routines re-entered</li>
<li><a href="https://gcc.gnu.org/PR9328">9328</a>: (c++) ICE with <code>typeof(X)</code> for overloaded <code>X</code></li>
<li><a href="https://gcc.gnu.org/PR9465">9465</a>: (preprocessor) <code>cpp -traditional</code> ICE on null bytes</li>
</ul>

<h4>C++ (compiler and library) bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR47">47</a>: scoping in nested classes is broken</li>
<li><a href="https://gcc.gnu.org/PR6745">6745</a>: problems with iostream rdbuf() member function</li>
<li><a href="https://gcc.gnu.org/PR8214">8214</a>: conversion from <code>const char*</code> const to <code>char*</code> sometimes accepted illegally</li>
<li><a href="https://gcc.gnu.org/PR8493">8493</a>: builtin strlen and overload resolution (same bug as <a href="https://gcc.gnu.org/PR8332">8332</a>)</li>
<li><a href="https://gcc.gnu.org/PR8503">8503</a>: strange behaviour of function types</li>
<li><a href="https://gcc.gnu.org/PR8727">8727</a>: compiler confused by inheritance from an anonymous struct</li>
<li><a href="https://gcc.gnu.org/PR7445">7445</a>: poor performance of <code>std::locale::classic()</code> in multi-threaded applications</li>
<li><a href="https://gcc.gnu.org/PR8230">8230</a>: mishandling of overflow in <code>vector&lt;T&gt;::resize</code></li>
<li><a href="https://gcc.gnu.org/PR8399">8399</a>: <code>sync_with_stdio(false)</code> breaks unformatted input</li>
<li><a href="https://gcc.gnu.org/PR8662">8662</a>: illegal access of private member of unnamed class is accepted</li>
<li><a href="https://gcc.gnu.org/PR8707">8707</a>: "make distclean" fails in <code>libstdc++-v3</code> directory</li>
<li><a href="https://gcc.gnu.org/PR8708">8708</a>: <code>__USE_MALLOC</code> doesn't work</li>
<li><a href="https://gcc.gnu.org/PR8790">8790</a>: Use of non-thread-safe <code>strtok</code> in <code>src/localename.cc</code></li>
<li><a href="https://gcc.gnu.org/PR8887">8887</a>: Bug in date formats with <code>--enable-clocale=generic</code></li>
<li><a href="https://gcc.gnu.org/PR9076">9076</a>: Call Frame Instructions are not handled correctly during unwind operation</li>
<li><a href="https://gcc.gnu.org/PR9151">9151</a>: <code>std::setprecision</code> limited to 16 digits when outputting a double to a stream</li>
<li><a href="https://gcc.gnu.org/PR9168">9168</a>: <code>codecvt&lt;char, char, mbstate_t&gt;</code> overwrites output buffers</li>
<li><a href="https://gcc.gnu.org/PR9269">9269</a>: libstdc++ headers: explicit specialization of function must precede its first use</li>
<li><a href="https://gcc.gnu.org/PR9322">9322</a>: return value of <code>basic_streambuf&lt;&gt;::getloc</code> affected by <code>locale::global</code></li>
<li><a href="https://gcc.gnu.org/PR9433">9433</a>: segfault in runtime support for <code>dynamic_cast</code></li>
</ul>

<h4>C and optimizer bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8032">8032</a>: GCC incorrectly initializes static structs that have flexible arrays</li>
<li><a href="https://gcc.gnu.org/PR8639">8639</a>: simple arithmetic expression broken</li>
<li><a href="https://gcc.gnu.org/PR8794">8794</a>: optimization improperly eliminates certain expressions</li>
<li><a href="https://gcc.gnu.org/PR8832">8832</a>: traditional "<code>asm volatile</code>" code is illegally optimized</li>
<li><a href="https://gcc.gnu.org/PR8988">8988</a>: loop optimizer bug: with <code>-O2</code>, code is generated that segfaults (found on i386, bug present for all platforms)</li>
<li><a href="https://gcc.gnu.org/PR9492">9492</a>: structure copy clobbers subsequent stores to structure</li>
</ul>

<h4>Objective-C bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR9267">9267</a>: Objective-C parser won't build with newer bison versions (e.g. 1.875)</li>
</ul>

<h4>Ada bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8344">8344</a>: Ada build problem due to conflict between <code>gcc/final.o</code>, <code>gcc/ada/final.o</code></li>
</ul>

<h4>Preprocessor bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8524">8524</a>: <code>_Pragma</code> within macros is improperly expanded</li>
<li><a href="https://gcc.gnu.org/PR8880">8880</a>: <code>__WCHAR_TYPE__</code> macro incorrectly set to "<code>long int</code>" with <code>-fshort-wchar</code></li>
</ul>

<h4>ARM-specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR9090">9090</a>: arm ICE with <code>&gt;= -O2</code>; regression from gcc-2.95</li>
</ul>

<h4>x86-specific (Intel/AMD)</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8588">8588</a>: ICE in <code>extract_insn</code>, at <code>recog.c:NNNN</code> (shift instruction)</li>
<li><a href="https://gcc.gnu.org/PR8599">8599</a>: loop unroll bug with <code>-march=k6-3</code></li>
<li><a href="https://gcc.gnu.org/PR9506">9506</a>: ABI breakage in structure return (affects BSD and Cygwin, but not GNU/Linux)</li>
</ul>

<h4>FreeBSD 5.0 specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR9484">9484</a>: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0</li>
</ul>

<h4>RTEMS-specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR9292">9292</a>: hppa1.1-rtems configurery problems</li>
<li><a href="https://gcc.gnu.org/PR9293">9293</a>: [m68k-elf/rtems] <code>config/m68k/t-crtstuff</code> bug</li>
<li><a href="https://gcc.gnu.org/PR9295">9295</a>: [mips-rtems] <code>config/mips/rtems.h</code> <code>init</code>/<code>fini</code> issue</li>
<li><a href="https://gcc.gnu.org/PR9296">9296</a>: gthr-rtems regression</li>
<li><a href="https://gcc.gnu.org/PR9316">9316</a>: powerpc-rtems: extending multilibs</li>
</ul>

<h4>HP-PA specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR9493">9493</a>: ICE with <code>-O2</code> when building a simple function</li>
</ul>

<h4>Documentation</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7341">7341</a>: hyperlink to <code>gcov</code> in GCC documentation doesn't work</li>
<li><a href="https://gcc.gnu.org/PR8947">8947</a>: Please add a warning about "<code>-malign-double</code>" in docs</li>
<li><a href="https://gcc.gnu.org/PR7448">7448</a>, <a href="https://gcc.gnu.org/PR8882">8882</a>: typo cleanups</li>
</ul>

<hr />
<h2 id="GCC3.2.1">GCC 3.2.1</h2>

<p>3.2.1 adds a new warning, <code>-Wabi</code>. This option warns when GNU
C++ generates code that is known not to be binary-compatible with the
vendor-neutral ia32/ia64 ABI. Please consult the GCC manual, included in the
distribution, for details.</p>

<p>This release also removes an old GCC extension, "naming types", and the
documentation now directs users to use a different GCC extension,
<code>__typeof__</code>, instead. The feature had evidently been broken for a
while.</p>

<p>Otherwise, 3.2.1 is a bug fix release only; other than bug fixes and the
new warning there are no new features that were not present in GCC 3.2.</p>

<p>In addition, the previous fix for 
<a href="https://gcc.gnu.org/PR7445">PR 7445</a>
(poor performance of <code>std::locale::classic()</code> in multi-threaded
applications) was reverted ("unfixed"), because the "fix" was not
thread-safe.</p>

<h3>Bug Fixes</h3>

<p>This section lists the problem reports (PRs) from GCC's bug tracking
system that
are known to be fixed in the 3.2.1 release. This list might not be complete
(that is, it is possible that some PRs that have been fixed are not listed
here). As you can see, the number of bug fixes is quite large, so it is
strongly recommended that users of earlier GCC 3.x releases upgrade to
GCC 3.2.1.</p>

<h4>Internal Compiler Errors (multi-platform)</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR2521">2521</a>: (c++) ICE in <code>build_ptrmemfunc</code>, in <code>cp/typeck.c</code></li>
<li><a href="https://gcc.gnu.org/PR5661">5661</a>: (c++) ICE instantiating template on array of unknown size (bad code)</li>
<li><a href="https://gcc.gnu.org/PR6419">6419</a>: (c++) ICE in <code>make_decl_rtl</code> for "longest" attribute on 64-bit platforms</li>
<li><a href="https://gcc.gnu.org/PR6994">6994</a>: (c++) ICE in <code>find_function_data</code></li>
<li><a href="https://gcc.gnu.org/PR7150">7150</a>: preprocessor: <code>GCC -dM -E</code> gives an ICE</li>
<li><a href="https://gcc.gnu.org/PR7160">7160</a>: ICE when optimizing branches without a return value</li>
<li><a href="https://gcc.gnu.org/PR7228">7228</a>: (c++) ICE when using member template and template function</li>
<li><a href="https://gcc.gnu.org/PR7266">7266</a>: (c++) ICE with <code>-pedantic</code> on missing typename</li>
<li><a href="https://gcc.gnu.org/PR7353">7353</a>: ICE from use of "Naming Types" extension, see above</li>
<li><a href="https://gcc.gnu.org/PR7411">7411</a>: ICE in <code>instantiate_virtual_regs_1</code>, in <code>function.c</code></li>
<li><a href="https://gcc.gnu.org/PR7478">7478</a>: (c++) ICE on <code>static_cast</code> inside template</li>
<li><a href="https://gcc.gnu.org/PR7526">7526</a>: preprocessor core dump when <code>_Pragma</code> implies <code>#pragma</code> dependency</li>
<li><a href="https://gcc.gnu.org/PR7721">7721</a>: (c++) ICE on simple (but incorrect) template
    (<a href="https://gcc.gnu.org/PR7803">7803</a> is a duplicate)</li>
<li><a href="https://gcc.gnu.org/PR7754">7754</a>: (c++) ICE on union with template parameter</li>
<li><a href="https://gcc.gnu.org/PR7788">7788</a>: (c++) redeclaring a definition as an incomplete class causes ICE</li>
<li><a href="https://gcc.gnu.org/PR8031">8031</a>: (c++) ICE in comptypes, in <code>cp/typeck.c</code></li>
<li><a href="https://gcc.gnu.org/PR8055">8055</a>: preprocessor dies with SIG11 when building FreeBSD kernel</li>
<li><a href="https://gcc.gnu.org/PR8067">8067</a>: (c++) ICE due to mishandling of <code>__FUNCTION__</code> and related variables</li>
<li><a href="https://gcc.gnu.org/PR8134">8134</a>: (c++) ICE in <code>force_store_init_value</code> on legal code</li>
<li><a href="https://gcc.gnu.org/PR8149">8149</a>: (c++) ICE on incomplete type</li>
<li><a href="https://gcc.gnu.org/PR8160">8160</a>: (c++) ICE in <code>build_modify_expr</code>, in <code>cp/typeck.c</code>: array initialization</li>
</ul>

<h4>C++ (compiler and library) bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR5607">5607</a>: No pointer adjustment in covariant return types</li>
<li><a href="https://gcc.gnu.org/PR6579">6579</a>: Infinite loop with statement expressions in member initialization</li>
<li><a href="https://gcc.gnu.org/PR6803">6803</a>: Default copy constructor bug in GCC 3.1</li>
<li><a href="https://gcc.gnu.org/PR7176">7176</a>: g++ confused by friend and static member with same name</li>
<li><a href="https://gcc.gnu.org/PR7188">7188</a>: Segfault with template class and recursive (incorrect) initializer list</li>
<li><a href="https://gcc.gnu.org/PR7306">7306</a>: Regression: GCC 3.x fails to compile code with virtual inheritance if a method has a variable number of arguments</li>
<li><a href="https://gcc.gnu.org/PR7461">7461</a>: <code>ctype&lt;char&gt;::classic_table()</code> returns offset array on Cygwin</li>
<li><a href="https://gcc.gnu.org/PR7524">7524</a>: <code>f(const float arg[3])</code> fails</li>
<li><a href="https://gcc.gnu.org/PR7584">7584</a>: Erroneous ambiguous base error on using declaration</li>
<li><a href="https://gcc.gnu.org/PR7676">7676</a>: Member template overloading problem</li>
<li><a href="https://gcc.gnu.org/PR7679">7679</a>: infinite loop when a right parenthesis is missing</li>
<li><a href="https://gcc.gnu.org/PR7811">7811</a>: default locale not taken from environment</li>
<li><a href="https://gcc.gnu.org/PR7961">7961</a>: <code>compare( char *)</code> implemented incorrectly in basic_string&lt;&gt;</li>
<li><a href="https://gcc.gnu.org/PR8071">8071</a>: <code>basic_ostream::operator&lt;&lt;(streambuf*)</code> loops forever if <code>streambuf::underflow()</code> leaves <code>gptr()</code> NULL (dups:
    <a href="https://gcc.gnu.org/PR8127">8127</a>,
    <a href="https://gcc.gnu.org/PR6745">6745</a>)</li>
<li><a href="https://gcc.gnu.org/PR8096">8096</a>: <code>deque::at()</code> throws <code>std::range_error</code> instead of <code>std::out_of_range</code></li>
<li><a href="https://gcc.gnu.org/PR8127">8127</a>: <code>cout &lt;&lt; cin.rdbuf()</code> infinite loop</li>
<li><a href="https://gcc.gnu.org/PR8218">8218</a>: Excessively large memory consumed for classes with large array members</li>
<li><a href="https://gcc.gnu.org/PR8287">8287</a>: GCC 3.2: Destructor called for non-constructed local object</li>
<li><a href="https://gcc.gnu.org/PR8347">8347</a>: empty vector range used in string construction causes core dump</li>
<li><a href="https://gcc.gnu.org/PR8348">8348</a>: <code>fail()</code> flag is set in <code>istringstream</code> when <code>eof()</code> flag is set</li>
<li><a href="https://gcc.gnu.org/PR8391">8391</a>: regression: infinite loop in <code>cp/decl2.c(finish_file)</code></li>
</ul>

<h4>C and optimizer bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR6627">6627</a>: <code>-fno-align-functions</code> doesn't seem to disable function alignment</li>
<li><a href="https://gcc.gnu.org/PR6631">6631</a>: <code>life_analysis</code> misoptimizes code to initialize fields of a structure</li>
<li><a href="https://gcc.gnu.org/PR7102">7102</a>: unsigned char division results in floating exception</li>
<li><a href="https://gcc.gnu.org/PR7120">7120</a>: Run once loop should *always* be unrolled (pessimization)</li>
<li><a href="https://gcc.gnu.org/PR7209">7209</a>: Bug involving array referencing and <code>?:</code> operator</li>
<li><a href="https://gcc.gnu.org/PR7515">7515</a>: invalid inlining of global function with <code>-O3</code></li>
<li><a href="https://gcc.gnu.org/PR7814">7814</a>: incorrect scheduling for glibc-2.2.92 strcpy test</li>
<li><a href="https://gcc.gnu.org/PR8467">8467</a>: bug in sibling call optimization</li>
</ul>

<h4>Preprocessor bugs</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR4890">4890</a>: incorrect line markers from the traditional preprocessor</li>
<li><a href="https://gcc.gnu.org/PR7357">7357</a>: <code>-M</code> option omits system headers files (making it the same as <code>-MM</code>)</li>
<li><a href="https://gcc.gnu.org/PR7358">7358</a>: Changes to Sun's <code>make</code> Dependencies</li>
<li><a href="https://gcc.gnu.org/PR7602">7602</a>: C++ header files found in <code>CPLUS_INCLUDE_PATH</code> treated as C headers</li>
<li><a href="https://gcc.gnu.org/PR7862">7862</a>: Interrupting <code>GCC -MD</code> removes <code>.d</code> file but not <code>.o</code></li>
<li><a href="https://gcc.gnu.org/PR8190">8190</a>: Failed compilation deletes <code>-MD</code> dependency file</li>
<li><a href="https://gcc.gnu.org/PR8524">8524</a>: <code>_Pragma</code> within macro is improperly expanded</li>
</ul>

<h4>x86 specific (Intel/AMD)</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR5351">5351</a>: (i686-only) function pass-by-value structure copy corrupts stack
    (<a href="https://gcc.gnu.org/PR7591">7591</a> is a duplicate)</li>
<li><a href="https://gcc.gnu.org/PR6845">6845</a>,
    <a href="https://gcc.gnu.org/PR7034">7034</a>,
    <a href="https://gcc.gnu.org/PR7124">7124</a>,
    <a href="https://gcc.gnu.org/PR7174">7174</a>: ICE's with <code>-march=pentium3/pentium2/athlon</code> (these are all the same underlying bug, in MMX register use)</li>
<li><a href="https://gcc.gnu.org/PR7134">7134</a>,
    <a href="https://gcc.gnu.org/PR7375">7375</a>,
    <a href="https://gcc.gnu.org/PR7390">7390</a>: ICE with <code>-march=athlon</code> (maybe same as above?)</li>
<li><a href="https://gcc.gnu.org/PR6890">6890</a>: <code>xmmintrin.h</code>, <code>_MM_TRANSPOSE4_PS</code> is broken</li>
<li><a href="https://gcc.gnu.org/PR6981">6981</a>: wrong code in 64-bit manipulation on x86</li>
<li><a href="https://gcc.gnu.org/PR7242">7242</a>: <code>GCC -mcpu=pentium[23]</code> doesn't define <code>__tune_pentiumpro__</code> macro</li>
<li><a href="https://gcc.gnu.org/PR7396">7396</a>: ix86: <code>cmpgt_ss</code>, <code>cmpge_ss</code>, <code>cmpngt_ss</code>, and <code>cmpnge_ss</code> SSE intrinsics are broken</li>
<li><a href="https://gcc.gnu.org/PR7630">7630</a>: GCC 3.2 breaks on Mozilla 1.0's JS sources with <code>-march=pentium4</code></li>
<li><a href="https://gcc.gnu.org/PR7693">7693</a>: Typo in i386 <code>mmintrin.h</code> header</li>
<li><a href="https://gcc.gnu.org/PR7723">7723</a>: ICE - Pentium3 sse - GCC 3.2</li>
<li><a href="https://gcc.gnu.org/PR7951">7951</a>: ICE on <code>-march=pentium4 -O2 -mfpmath=sse</code></li>
<li><a href="https://gcc.gnu.org/PR8146">8146</a>: (i686 only) gcc 3.2 miscompiles gcc 2.95.3</li>
</ul>

<h4>PowerPC specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR5967">5967</a>: GCC bug when profiling nested functions on powerpc</li>
<li><a href="https://gcc.gnu.org/PR6984">6984</a>: wrong code generated with <code>-O2</code>, <code>-O3</code>, <code>-Os</code> for do-while loop on PowerPC</li>
<li><a href="https://gcc.gnu.org/PR7114">7114</a>: PowerPC: ICE building <code>strcoll.op</code> from glibc-2.2.5</li>
<li><a href="https://gcc.gnu.org/PR7130">7130</a>: miscompiled code for GCC-3.1 on powerpc-unknown-linux-gnu with <code>-funroll-all-loops</code></li>
<li><a href="https://gcc.gnu.org/PR7133">7133</a>: PowerPC ICE: unrecognizable insn</li>
<li><a href="https://gcc.gnu.org/PR7380">7380</a>: ICE in <code>extract_insn</code>, at <code>recog.c:2148</code></li>
<li><a href="https://gcc.gnu.org/PR8252">8252</a>: ICE on Altivec code with optimization turned on</li>
<li><a href="https://gcc.gnu.org/PR8451">8451</a>: Altivec ICE in GCC 3.2</li>
</ul>

<h4>HP/PA specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7250">7250</a>: <code>__ashrdi3</code> returns wrong value on 32 bit hppa</li>
</ul>

<h4>SPARC specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR6668">6668</a>: when using <code>--disable-multilib</code>, <code>libgcc_s.so</code> is installed in the wrong place on sparc-solaris</li>
<li><a href="https://gcc.gnu.org/PR7151">7151</a>: ICE when compiling for UltraSPARC</li>
<li><a href="https://gcc.gnu.org/PR7335">7335</a>: SPARC: ICE in <code>verify_wide_reg (flow.c:557)</code> with long double and <code>-O1</code></li>
<li><a href="https://gcc.gnu.org/PR7842">7842</a>: [REGRESSION] SPARC code gen bug</li>
</ul>

<h4>ARM specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7856">7856</a>: [arm] invalid offset in constant pool reference</li>
<li><a href="https://gcc.gnu.org/PR7967">7967</a>: optimization produces wrong code (ARM)</li>
</ul>

<h4>Alpha specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7374">7374</a>: <code>__builtin_fabsl</code> broken on alpha</li>
</ul>

<h4>IBM s390 specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7370">7370</a>: ICE in <code>fixup_var_refs_1</code> on s390x</li>
<li><a href="https://gcc.gnu.org/PR7409">7409</a>: loop optimization bug on s390x-linux-gnu</li>
<li><a href="https://gcc.gnu.org/PR8232">8232</a>: s390x: ICE when using bcmp with <code>int</code> length argument</li>
</ul>

<h4>SCO specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7623">7623</a>: SCO OpenServer build fails with <code>machmode.def: undefined symbol: BITS_PER_UNIT</code></li>
</ul>

<h4>m68k/Coldfire specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR8314">8314</a>: <code>crtbegin</code>, <code>crtend</code> need to be multilib'ed for this platform</li>
</ul>

<h4>Documentation</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR761">761</a>: Document some undocumented options</li>
<li><a href="https://gcc.gnu.org/PR5610">5610</a>: Fix documentation about invoking SSE instructions (<code>-mfpmath=sse</code>)</li>
<li><a href="https://gcc.gnu.org/PR7484">7484</a>: List <code>-Wmissing-declarations</code> as C-only option</li>
<li><a href="https://gcc.gnu.org/PR7531">7531</a>: <code>-mcmodel</code> not documented for x86-64</li>
<li><a href="https://gcc.gnu.org/PR8120">8120</a>: Update documentation of bad use of <code>##</code></li>
</ul>

<hr />
<h2 id="GCC3.2">GCC 3.2</h2>

<p>3.2 is a small bug fix release, but there is a change to the application
binary interface (ABI), hence the change to the second part of the version
number.</p>

<p>The main purpose of the 3.2 release is to correct a couple of problems in
the C++ ABI, with the intention of providing a stable interface going
forward.&nbsp; Accordingly, 3.2 is only a small change to 3.1.1.</p>

<h3>Bug Fixes</h3>

<h4>C++</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7320">7320</a>: g++ 3.2 relocation problem</li>
<li><a href="https://gcc.gnu.org/PR7470">7470</a>: vtable: virtual function pointers not in declaration order</li>
</ul>

<h4>libstdc++</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR6410">6410</a>: Trouble with non-ASCII monetary symbols and <code>wchar_t</code></li>
<li><a href="https://gcc.gnu.org/PR6503">6503</a>,
    <a href="https://gcc.gnu.org/PR6642">6642</a>,
    <a href="https://gcc.gnu.org/PR7186">7186</a>: Problems with comparing or subtracting various types of const and non-const iterators</li>
<li><a href="https://gcc.gnu.org/PR7216">7216</a>: ambiguity with <code>basic_iostream::traits_type</code></li>
<li><a href="https://gcc.gnu.org/PR7220">7220</a>: problem with <code>basic_istream::ignore(0,delimiter)</code></li>
<li><a href="https://gcc.gnu.org/PR7222">7222</a>: <code>locale::operator==()</code> doesn't work on <code>std::locale("")</code></li>
<li><a href="https://gcc.gnu.org/PR7286">7286</a>: placement operator delete issue</li>
<li><a href="https://gcc.gnu.org/PR7442">7442</a>: <code>cxxabi.h</code> does not match the C++ ABI</li>
<li><a href="https://gcc.gnu.org/PR7445">7445</a>: poor performance of <code>std::locale::classic()</code> in multi-threaded applications</li>
</ul>

<h4>x86-64 specific</h4>
<ul>
<li><a href="https://gcc.gnu.org/PR7291">7291</a>: off-by-one in generated inline <code>bzero</code> code for x86-64</li>
</ul>

</body>
</html>
